package yl.hs.bmipfull.service.production;

import yl.hs.bmipfull.pojo.production.TransTaskEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.utils.datastate.ShipControlState;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;
import yl.hs.bmipfull.viewmodels.host.TransTaskVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 作用:  运输任务,商砼可以拆为2条派车任务服务层接口<br/>
 * 创建时间: 2021年06月19日 09时30分07秒 <br/>
 *
 * @author 谢东
 */

public interface ITransTaskService extends IBaseService {

    /**
     * 查询运输任务,商砼可以拆为2条派车任务信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @return 运输任务, 商砼可以拆为2条派车任务-List<{@link TransTaskEntity}>
     * @throws Exception 查询参数异常
     */
    List<TransTaskEntity> queryList(PageQuery pageQuery) throws Exception;

    /**
     * 查询运输任务,商砼可以拆为2条派车任务信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @param rowNum    每页条数
     * @param page      页码
     * @return 站内信息-List-SiteMessageMainEntity
     * @throws Exception 查询条件异常
     */
    PageResult<TransTaskEntity> queryPage(PageQuery pageQuery, int rowNum, int page) throws Exception;

    /**
     * 查询运输任务,商砼可以拆为2条派车任务信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @param rowNum    每页条数
     * @param page      页码
     * @return 站内信息-List-SiteMessageMainEntity
     * @throws Exception 查询条件异常
     */
    PageResult<Map<String,Object>> queryPageByDriver(PageQuery pageQuery, int rowNum, int page);
    /**
     * 根据运输任务,商砼可以拆为2条派车任务编号查询运输任务,商砼可以拆为2条派车任务信息
     *
     * @param sn 编号
     * @return 运输任务, 商砼可以拆为2条派车任务-{@link TransTaskEntity}
     */
    TransTaskEntity findBySn(String sn);


    /**
     * 根据生产任务单编号查询派车信息
     *
     * @param taskSN 生产任务单编号
     * @return 派车信息
     */
    List<Map<String, Object>> findByTaskSN(String taskSN);

    /**
     * 保存运输任务,商砼可以拆为2条派车任务信息
     *
     * @param model 运输任务,商砼可以拆为2条派车任务表单信息
     * @param sn    运输任务,商砼可以拆为2条派车任务信息原有编号
     * @return 执行结果-受影响行数-Integer
     * @throws Exception 保存异常
     */
    Integer saveTransTask(Map<String, Object> model, String sn) throws Exception;

    /**
     * 根据编号修改生产任务单编号
     *
     * @param sn     编号
     * @param taskSN 生产任务编号
     * @return 受影响行数
     * @throws Exception
     */
    Integer updateTaskSnBySN(String sn, String taskSN) throws Exception;

    /**
     * 根据运输任务,商砼可以拆为2条派车任务编号删除运输任务,商砼可以拆为2条派车任务信息
     *
     * @param sn 运输任务,商砼可以拆为2条派车任务编号
     * @return 影响行数
     */
    Integer delete(String[] sn);

    /**
     * 根据车辆编号查询已派车
     *
     * @param truckCode 任务单编号
     * @return 返回值
     */
    List<TransTaskEntity> queryListByTaskCar(String truckCode);

    /**
     * 根据生产任务单获取派车信息
     *
     * @param pageQuery 任务单号
     * @return 派车信息
     */
    List<Map<String, Object>> getTranListByTaskSN(PageQuery pageQuery);

    /**
     * 根据派车信息更改派车状态
     *
     * @param sn 派车id
     * @return 返回值
     */
    Integer updateBySn(short state, String sn);

    /**
     * 根据编号撤回派车
     *
     * @param sn 编号
     * @return 受影响行数
     */
    Integer backTransTask(String sn);

    /**
     * 根据生产线编号获取派车信息
     * @param lineSn 生产线编号
     * @return 派车信息
     */
    List<TransTaskVO> selectByLineSn(String lineSn);

    ShipControlState checkContractControl(String contractSN, BigDecimal netWeight);

    Integer upDate(TransTaskEntity entity);
}